part of "../writer.dart";

/// 以Map为形式的读写器，可以读写任何形式的数据，比如List<Rawable>等，它会自动处理为Raw的格式
/// 也就是说，input为通用运算符，而获取则有各种方式
/// 通常这个Writer适合用来写全局配置等不常修改的信息（因为每次读取的时候都要读一遍文件，没有加载在内存中）
abstract class MapWriter {
  /// 检查Map中是否包含某个key
  bool containsKey(String key);

  /// 如果input null，则意思就是删除
  /// 这里的处理可以参考File.write的通用运算符
  input(String key, dynamic value);

  /// 当调用此函数时，如果key已经存在，则不会放入
  inputIf(String key, dynamic value);

  /// 通过一种反压缩的方法得到一个List或者单个对象，但如果发现key中的内容不是List，则会throw
  List<T> getList<T>(String key, {required T Function(Json raw) unzip});
  T getObject<T>(String key, {required T Function(Json raw) unzip});

  /// 通过cast的方式获取其中的key，如果投射失败，则报错
  T getOne<T>(String key);
}
